package Year2021;

import com.sun.java.swing.plaf.windows.WindowsDesktopIconUI;

/**
 小蓝有很多数字卡片，每张卡片上都是数字0 到9。
 小蓝准备用这些卡片来拼一些数，他想从1 开始拼出正整数，每拼一个，就保存起来，卡片就不能用来拼其它数了。
 小蓝想知道自己能从1 拼到多少。
 例如，当小蓝有30 张卡片，其中0 到9 各3 张，则小蓝可以拼出1 到10，但是拼11 时卡片1 已经只有一张了，不够拼出11。
 现在小蓝手里有0 到9 的卡片各2021 张，共20210 张，请问小蓝可以从1拼到多少？
 提示：建议使用计算机编程解决问题。
 */
public class 卡片 {
    static int[][] num = new int[10][2];
    static int number = 0;
    public static void main(String[] args) {
        卡片_学习();
        //卡片_提交();
    }
    public static void 卡片_提交() {
        int[][] num = new int[10][2];
        int number = 0;
        for (int i = 0; i < 10; i++) {
            num[i][0] = 2021;
            num[i][1] = i;
        }
        for (int i = 1; i <= 100000; i++) {
            int n = i;
            while( n > 0 && num[ n % 10][0] > 0){
                num[n%10][0] -=1;
                n = n/10;
            }
            if(n != 0){
                number = i-1;
                break;
            }
        }
        System.out.println(number);
    }
    public static void 卡片_学习() {
        int[][] num = new int[10][2];
        int number = 0;
        for (int i = 0; i < 10; i++) {
            num[i][0] = 2021;
            num[i][1] = i;
        }
        show(num);
        for (int i = 1; i <= 100000; i++) {
            int n = i;
            while( n > 0 && num[ n % 10][0] > 0){
                    num[n%10][0] -=1;
                    n = n/10;
            }
            if(n != 0){ // 数字是准确的，但是0-9的剩余个数，因为最后一个数的计算时，改变了一部分。
                number = i-1;
                break;
            }
        }
        System.out.println("************************");
        show(num);
        System.out.println(number);
    }
    public static void show(int[][] num) {
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 2; j++) {
                System.out.print(num[i][j]+"\t\t");
            }
            System.out.println();
        }
    }

}
